#ifndef TABLA_H_
#define TABLA_H_
#include <vector>
#include "Key.h"
#include <iostream>
#include <fstream>
#include <cstring>
#include <iterator>
#include <algorithm>
#include <iostream>
#include <vector>

using namespace std;

class Tabla{

private:

	unsigned int tamanio; //tamanio de la tabla de hash
	std::vector<int> tablaNrosBuckets; //vector con los numeros de bucket
	//int valorInicial;//=-1;//? para cargar la tabla con este valor inicialmente

public:

	/*
	* Crea la tabla con el tamaño indicado
	* */
	Tabla(int tamaniotabla);
	
	virtual ~Tabla();

    /*Es la funcion modulo usada para calcular la posicion de la tabla
     * segun el metodo de bits sufijos: key mod tamanio de la tabla
     * */
	unsigned int calcularNroBucket(Key key);

    /*Devuelve el nro de bucket que se encuentra en la posicion de la tabla
     * calculada con la key
     * */
    int obtenerNroBucket(Key key);

    /*Duplica la tabla y devuelve el tamanio nuevo*/
    unsigned int duplicarTabla();

    /*Reduce la tabla devolviendo el tamanio nuevo*/
    unsigned int reducirTabla();

    /*Guarda la tabla en el archivo*/
    unsigned int guardarTabla(string nombreArch);

    /*Carga de la tabla desde el archivo a memoria*/
    unsigned int cargarTabla(string nombreArch);

    /*Necesario para las pruebas*/
    std::vector<int> getTabla();

    /*Necesario para las pruebas*/
    void setTabla(std::vector<int> tabla);

    /*devuelve el td de un numero de bucket*/
    unsigned int obtenertd(int nrobucket);

    /*modifica pos de la tabla*/
    void modificar(int pos,int valor);

    /*deveulve el contenido de la pos de la tabla*/
    int obtener(int pos);

    /*muestra la tabla para las pruebas*/
    void mostrar();

    /*devuelve tamanio tabla*/
    unsigned int tamanioTabla();
};

#endif 
